/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Repositories;

import Model.ProdutoModel;
import Util.Conexao;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Contagem
 */
public class ProdutoRepository {
 
    StringBuilder strSql;
    
    public ProdutoRepository()
    {
        
    }
    
    public boolean Salvar(ProdutoModel produto)
    {
        try
        {
            strSql = new StringBuilder();
            
            Conexao.IniciarConexao();
            
            strSql.append("INSERT INTO produto (PRODUTO_DESCRICAO,PRODUTO_VALOR,PRODUTO_ATIVO) ");
            strSql.append("values ('"+produto.getPRODUTO_DESCRICAO()+"',"+produto.getPRODUTO_VALOR()+",'"+produto.getPRODUTO_ATIVO()+"')");
            
            Conexao.stmt.executeUpdate(strSql.toString());
            
            return true;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return false;
        }
        finally
        {
            strSql = null;
            Conexao.FecharConexao();
        }
            
    }
    
    
    public boolean Alterar(ProdutoModel produto)
    {
        try
        {
            strSql = new StringBuilder();
            
            Conexao.IniciarConexao();
            
            strSql.append("UPDATE produto SET PRODUTO_DESCRICAO = '"+produto.getPRODUTO_DESCRICAO()+"', ");
            strSql.append("PRODUTO_VALOR = "+produto.getPRODUTO_VALOR()+", PRODUTO_ATIVO = '"+produto.getPRODUTO_ATIVO()+"' ");
            strSql.append("WHERE PRODUTO_ID = "+produto.getPRODUTO_ID()+" ");

            Conexao.stmt.executeUpdate(strSql.toString());
            
            return true;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return false;
        }
        finally
        {
            strSql = null;
            Conexao.FecharConexao();
        }
            
    }
    
    public boolean Deletar(int IdProduto)
    {
        try
        {
            strSql = new StringBuilder();
            
            Conexao.IniciarConexao();
            
            
            strSql.append("DELETE FROM produto WHERE PRODUTO_ID = "+IdProduto+" ");
            
            Conexao.stmt.executeUpdate(strSql.toString());
            
            return true;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return false;
        }
        finally
        {
            strSql = null;
            Conexao.FecharConexao();
        }
    }
    
    
    public ArrayList<ProdutoModel> ListadeProdutos() throws Exception
    {
        try
        {
            strSql = new StringBuilder();
            
            ArrayList<ProdutoModel> produtos = new ArrayList<ProdutoModel>();
            
            Conexao.IniciarConexao();
            
            strSql.append("SELECT PRODUTO_ID,PRODUTO_DESCRICAO,PRODUTO_VALOR,");
            strSql.append("(CASE PRODUTO_ATIVO WHEN 'A' THEN 'Ativo' ELSE 'Inativo' END) AS PRODUTO_ATIVO ");
            strSql.append("from produto ");
                    
            
            Conexao.rs = Conexao.stmt.executeQuery(strSql.toString());
            while(Conexao.rs.next())
            {
                ProdutoModel produto = new ProdutoModel();
                produto.setPRODUTO_ID(Integer.parseInt(Conexao.rs.getString("PRODUTO_ID")));
                produto.setPRODUTO_DESCRICAO(Conexao.rs.getString("PRODUTO_DESCRICAO"));
                produto.setPRODUTO_ATIVO(Conexao.rs.getString("PRODUTO_ATIVO"));
                produto.setPRODUTO_VALOR(Double.parseDouble(Conexao.rs.getString("PRODUTO_VALOR")));
                produtos.add(produto);
            }
            
            return produtos;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
    }
    
    
    //Caso o tipo seja 1 ele vai buscar em todos... caso seja 2 vai buscar apenas os ativos
    public ArrayList<ProdutoModel> BuscaProduto(String descricao,int tipo) throws Exception
    {
        try
        {
            strSql = new StringBuilder();
            
            ArrayList<ProdutoModel> produtos = new ArrayList<ProdutoModel>();
            
            Conexao.IniciarConexao();
            
            strSql.append("SELECT PRODUTO_ID,PRODUTO_DESCRICAO,PRODUTO_VALOR,");
            strSql.append("(CASE PRODUTO_ATIVO WHEN 'A' THEN 'Ativo' ELSE 'Inativo' END) AS PRODUTO_ATIVO ");
            strSql.append("from produto ");
            strSql.append("WHERE PRODUTO_DESCRICAO LIKE '"+descricao+"%' ");
            if(tipo == 2)
                strSql.append("AND PRODUTO_ATIVO = 'A'");
                    
            
            Conexao.rs = Conexao.stmt.executeQuery(strSql.toString());
            while(Conexao.rs.next())
            {
                ProdutoModel produto = new ProdutoModel();
                produto.setPRODUTO_ID(Integer.parseInt(Conexao.rs.getString("PRODUTO_ID")));
                produto.setPRODUTO_DESCRICAO(Conexao.rs.getString("PRODUTO_DESCRICAO"));
                produto.setPRODUTO_ATIVO(Conexao.rs.getString("PRODUTO_ATIVO"));
                produto.setPRODUTO_VALOR(Double.parseDouble(Conexao.rs.getString("PRODUTO_VALOR")));
                produtos.add(produto);
            }
            
            return produtos;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
    }
    
    
    public ArrayList<ProdutoModel> BuscaProdutoId(int IdProduto) throws Exception
    {
        try
        {
            strSql = new StringBuilder();
            
            ArrayList<ProdutoModel> produtos = new ArrayList<ProdutoModel>();
            
            Conexao.IniciarConexao();
            
            strSql.append("SELECT PRODUTO_ID,PRODUTO_DESCRICAO_PRODUTO_VALOR,");
            strSql.append("(CASE PRODUTO_ATIVO WHEN 'A' THEN 'Ativo' ELSE 'Inativo' END) AS PRODUTO_ATIVO ");
            strSql.append("WHERE PRODUTO_ID = "+IdProduto+" ");
            strSql.append("AND PRODUTO_ATIVO = 'A' ");
                    
            
            Conexao.rs = Conexao.stmt.executeQuery(strSql.toString());
            while(Conexao.rs.next())
            {
                ProdutoModel produto = new ProdutoModel();
                produto.setPRODUTO_ID(Integer.parseInt(Conexao.rs.getString("PRODUTO_ID")));
                produto.setPRODUTO_DESCRICAO(Conexao.rs.getString("PRODUTO_DESCRICAO"));
                produto.setPRODUTO_ATIVO(Conexao.rs.getString("PRODUTO_ATIVO"));
                produto.setPRODUTO_VALOR(Double.parseDouble(Conexao.rs.getString("PRODUTO_VALOR")));
                produtos.add(produto);
            }
            
            return produtos;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
    }
    
    public ProdutoModel getUsuario(int IdProduto)
    {
        ProdutoModel produto = null;
        try
        {
            strSql = new StringBuilder();
             
            Conexao.IniciarConexao();
            
            strSql.append("SELECT * FROM produto WHERE PRODUTO_ID = "+IdProduto+" ");
            
            Conexao.rs = Conexao.stmt.executeQuery(strSql.toString());
            while(Conexao.rs.next())
            {
                produto = new ProdutoModel();
                produto.setPRODUTO_ID(Integer.parseInt(Conexao.rs.getString("PRODUTO_ID")));
                produto.setPRODUTO_DESCRICAO(Conexao.rs.getString("PRODUTO_DESCRICAO"));
                produto.setPRODUTO_ATIVO(Conexao.rs.getString("PRODUTO_ATIVO"));
                produto.setPRODUTO_VALOR(Double.parseDouble(Conexao.rs.getString("PRODUTO_VALOR")));
                break;
            }
            return produto;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            return produto;
        }
    }
    
    
    public ProdutoModel GetProdutoId(int IdProduto) throws Exception
    {
        try
        {
            strSql = new StringBuilder();
            
            ProdutoModel produto = null;
            
            Conexao.IniciarConexao();
            
            strSql.append("SELECT PRODUTO_ID,PRODUTO_DESCRICAO,PRODUTO_VALOR,");
            strSql.append("(CASE PRODUTO_ATIVO WHEN 'A' THEN 'Ativo' ELSE 'Inativo' END) AS PRODUTO_ATIVO ");
            strSql.append("from produto ");
            strSql.append("WHERE PRODUTO_ID = "+IdProduto+" ");
                    
            
            Conexao.rs = Conexao.stmt.executeQuery(strSql.toString());
            while(Conexao.rs.next())
            {
                produto = new ProdutoModel();
                produto.setPRODUTO_ID(Integer.parseInt(Conexao.rs.getString("PRODUTO_ID")));
                produto.setPRODUTO_DESCRICAO(Conexao.rs.getString("PRODUTO_DESCRICAO"));
                produto.setPRODUTO_ATIVO(Conexao.rs.getString("PRODUTO_ATIVO"));
                produto.setPRODUTO_VALOR(Double.parseDouble(Conexao.rs.getString("PRODUTO_VALOR")));
            }
            
            return produto;
        }
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage());
            throw ex;
        }
        
    }
    
    public void MetodoBolha(ArrayList<ProdutoModel> produtos)
    {
        ProdutoModel produto;
        int contador = 1;
        do{
            for (int i=0; i < produtos.size() -1; i++){
                
                if (produtos.get(i).getPRODUTO_ID() < produtos.get(i+1).getPRODUTO_ID()){
                    produto = produtos.get(i);
                    
                    produtos.set(i, produtos.get(i+1));
                    produtos.set(i+1,produto);
                }
            }
            contador++;
        } while (contador < produtos.size());
    }
}
